<?php
// +----------------------------------------------------------------------
// |  Aliyun SMS插件
// +----------------------------------------------------------------------
// | Author: Zhang <zhyacn@163.com>
// +----------------------------------------------------------------------
namespace plugins\mobile_code; //Demo插件英文名，改成你的插件英文就行了
use Aliyun\DySDKLite\SignatureHelper;

require_once VENDOR_PATH . '/aliyun-dysms-php-sdk-lite' . '/SignatureHelper.php';
use cmf\lib\Plugin;

/**
 * MobileCodePlugin
 */
class MobileCodePlugin extends Plugin {

	public $info = [
		'name' => 'MobileCode',
		'title' => '阿里云SMS验证码',
		'description' => '阿里云手机验证码',
		'status' => 1,
		'author' => 'zhyacn',
		'version' => '1.0',
	];

	public $has_admin = 0; //插件是否有后台管理界面

	//安装方法必须实现
	public function install() {
		return true; //安装成功返回true，失败false
	}

	//卸载方法必须实现
	public function uninstall() {
		return true; //卸载成功返回true，失败false
	}

	//实现的send_mobile_verification_code钩子方法
	public function sendMobileVerificationCode($param) {
		$mobile = $param['mobile']; //手机号
		$code = $param['code']; //验证码
		$config = $this->getConfig();
		$expire_minute = intval($config['expire_minute']);
		$expire_minute = empty($expire_minute) ? 30 : $expire_minute;
		$expire_time = time() + $expire_minute * 60;
		$result = false;

		// *** 需用户填写部分 ***

		// fixme 必填: 请参阅 https://ak-console.aliyun.com/ 取得您的AK信息
		$accessKeyId = $config['accessKeyId'];
		$accessKeySecret = $config['accessKeySecret'];

		// fixme 必填: 短信接收号码
		$params["PhoneNumbers"] = $mobile;

		// fixme 必填: 短信签名，应严格按"签名名称"填写，请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
		$params["SignName"] = $config['signature'];

		// fixme 必填: 短信模板Code，应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
		$params["TemplateCode"] = $config['templateId'];

		// fixme 可选: 设置模板参数, 假如模板中存在变量需要替换则为必填项
		$params['TemplateParam'] = Array(
			$config['templateCode'] => $code,
			"product" => "123",
		);

		// fixme 可选: 设置发送短信流水号
		// $params['OutId'] = "12345";

		// fixme 可选: 上行短信扩展码, 扩展码字段控制在7位或以下，无特殊需求用户请忽略此字段
		$params['SmsUpExtendCode'] = "1234567";

		// *** 需用户填写部分结束, 以下代码若无必要无需更改 ***
		if (!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
			$params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
		}

		// 初始化SignatureHelper实例用于设置参数，签名以及发送请求
		$helper = new SignatureHelper();

		// 此处可能会抛出异常，注意catch
		$content = $helper->request(
			$accessKeyId,
			$accessKeySecret,
			"dysmsapi.aliyuncs.com",
			array_merge($params, array(
				"RegionId" => "cn-hangzhou",
				"Action" => "SendSms",
				"Version" => "2017-05-25",
			))
			// fixme 选填: 启用https
			// ,true
		);

		if ($content->Code == 'OK') {
			$result = [
				'error' => 0,
				'message' => '验证码已发送成功，请查看手机短信。',
			];
		} else {
			$result = [
				'error' => 1,
				'message' => '短信发送失败，服务商返回结果错误，重新发送。',
			];
		}

		return $result;
	}

}